package com.ims.system.tag;

import java.io.IOException;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.ims.common.constant.IMSCons;
import com.ims.common.util.IMSUtil;
import com.ims.system.model.Dict;
import com.ims.system.util.CacheCxt;

/**
 * 
 * 类描述： 字典数据存储标签 创建人：陈骑元 邮箱：240823329@qq.com 创建时间：Oct 7, 2016 9:34:49 AM 修改人：
 * 修改时间： 修改备注：
 * 
 * @version 1.0
 */
public class CodeStoreTag extends TagSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static Log log = LogFactory.getLog(CodeOutTag.class);
	/**
	 * 字典键
	 */
	private String dictKey;
	/**
	 * 选择默认值
	 */
	private String selectValue;
	/**
	 * 过滤字典值
	 */
	private String filterCode;
	/**
	 * 
	 */
	private String prompt="请选择";

	public String getPrompt() {
		return prompt;
	}

	public void setPrompt(String prompt) {
		this.prompt = prompt;
	}

	public String getDictKey() {
		return dictKey;
	}

	public void setDictKey(String dictKey) {
		this.dictKey = dictKey;
	}

	public String getSelectValue() {
		return selectValue;
	}

	public void setSelectValue(String selectValue) {
		this.selectValue = selectValue;
	}

	public String getFilterCode() {
		return filterCode;
	}

	public void setFilterCode(String filterCode) {
		this.filterCode = filterCode;
	}

	/**
	 * 标签开始
	 */
	@SuppressWarnings("static-access")
	public int doStartTag() throws JspException {
		StringBuffer sb = new StringBuffer();
		sb.append("<option value=\"\" >").append(prompt).append("</option>").append("\n");
		if (IMSUtil.isNotEmpty(dictKey)) {
			List<Dict> dictList = CacheCxt.getCacheDict(dictKey);
			for (Dict dict : dictList) {
				String dictCode = dict.getDictCode();
				String dictValue = dict.getDictValue();
				if (!exists(dictCode)) {
					if (dictCode.equals(selectValue)) {
						sb.append("<option value=\"" + dictCode + "\" selected>").append(dictValue).append("</option>")
								.append("\n");
					} else {
						sb.append("<option value=\"" + dictCode + "\" >").append(dictValue).append("</option>")
								.append("\n");
					}

				}

			}
			if (sb.length() > 1) {
				sb.deleteCharAt(sb.length() - 1);
			}

		} else {
			log.error("字典标签对应的dictKey字段不能为空");
		}

		try {
			pageContext.getOut().write(sb.toString());
		} catch (IOException e) {
			log.error("字典标签发生错误：" + e.getMessage());
			e.printStackTrace();
		}
		return super.SKIP_BODY;
	}

	/**
	 * 
	 * 简要说明：判断字符串是否存在数组中 编写者：陈骑元 创建时间：2017年3月10日 下午5:09:51
	 * 
	 * @param 说明
	 * @return 说明
	 */
	public boolean exists(String str) {
		if (IMSUtil.isNotEmpty(filterCode)) {
			String[] array = filterCode.split(IMSCons.MARK_CSV);
			if (IMSUtil.isNotEmpty(array) && IMSUtil.isNotEmpty(str)) {
				for (int i = 0; i < array.length; i++) {
					String strTemp = array[i];
					if (str.equals(strTemp)) {
						return true;
					}
				}
			}
		}

		return false;

	}

	/**
	 * 标签结束
	 */
	@SuppressWarnings("static-access")
	public int doEndTag() throws JspException {
		return super.EVAL_PAGE;
	}

}
